פרק 2- תכנות socketים ברק גונן מבוסס על ספר הלימוד "רשתות מחשבים" עומר רוזנבוים מאת 1
socket מהי תקשורת שרת לקוח מהו socket נכתוב שרת ולקוח בשפת,python השרת והלקוח יתקשרו ביניהם: בעזרת שליחת הודעות העברת קבצים תמונות וכו' 2 ברק גונן
שרת,server לקוח - client צורת התקשורת הנפוצה ביותר באינטרנט ה- server מספק שירות כלשהו ה- client פונה ל- server כדי להשתמש בשירות התקשורת בין השרת והלקוח מתבצעת על ידי socket 3 ברק גונן
Socket הוא נקודת קצה של חיבור בין שני רכיבים אם רוצים להעביר מידע בין מחשבים, צריך לקשר ביניהם גם העברת מידע בין תוכנות שרצות על אותו מחשב מצריכה קישור נקודות הכניסה והיציאה של המידע מכונות socket אפשר להמשיל socket לצינור: ב- socket זורם מידע- זרם של בתים זרימת המידע היא דו כיוונית יש ל- socket נקודות התחלה וסיום ברק גונן 4
כדי ש- socket יוכל לשמש להעברת מידע, צריך להגדיר את נקודות הקצה שלו הגדרת נקודת קצה מתבצעת ע"י שני מזהים: מזהה הרכיב- עם איזה מחשב מתקיימת התקשורת? מזהה התהליך- על המחשב שאיתו מתקיימת התקשורת רצות מספר תוכנות. עם איזו תוכנה מתקיימת התקשורת? Socket הוא צירוף של 2 נקודות קצה- שרת ולקוח מזהה הרכיב: כתובת IP מזהה התהליך: מספר פורט Port IP מספר בטווח 0-65535 Socket מוגדר על ידי צירוף ו- Port 5 ברק גונן
שרת שכתובת ה- IP שלו היא 1.2.3.4 מאחסן דפי אינטרנט שונים השרת תומך בהעברת דפים רגילה HTTP או מאובטחת HTTPS שרת שכתובת ה- IP שלו היא 5.6.7.8 מספק מספר שירותים השרת תומך בהעברת קבצים, יודע לקשר בין כתובות דומיין לכתובות IP ויודע לטפל באימיילים לאיזה צירוף של IP ו- Port צריך לפנות לקוח שרוצה לבצע תשאול?DNS גלישה מאובטחת לאתר אינטרנט? תהליכים:.1 העברת קבצים FTP פורט 20.2 מענה לבקשות - DNS פורט 53 3. שליחה וקבל אימיילים SMTP פורט 25 תהליכים: 1. גלישה לדפי אינטרנט HTTP פורט 80 2. גלישה לדפי אינטרנט מאובטחים HTTPS פורט 443 שרת 1.2.3.4 שרת 5.6.7.8 6 ברק גונן
על השרת שכתובתו 1.2.3.4 הותקן דפדפן. תלמיד רוצה לגלוש מהשרת אל אתר אינטרנט, שמאוחסן על אותו השרת. לאיזה IP צריך לפנות? רמז: ה- IP אינו 1.2.3.4 תשובה: 127.0.0.1. משמעות IP זה הינה "כתובת הבית", כלומר, התוכנה מולה נפתח ה- socket נמצאת באותו המחשב 7 ברק גונן
הלקוח מנסה להתחבר לשרת IP Port, אם השרת מאזין בפורט הנ"ל, נוצר קשר חדש דו כיווני import socket AF_INET: Internet protocol (IP) SOCK_STREAM: Connection type (TCP) my_socket = socket.socket(socket.af_inet, socket.sock_stream) my_socket.connect(('127.0.0.1', 1729)) my_socket.send( Some Data To Send Here ) data = my_socket.recv(1024) my_socket.close() 8 ברק גונן
הורידו את השרת מהכתובת http://cyber.org.il/networks/c02/echo_server_stream.pyc שימרו את הקובץ למיקום C:\Cyber\echo_server_stream.pyc מה- line command הריצו את הפקודה: כיתבו כעת לקוח ש: python C:\Cyber\echo_server_stream.pyc מתחבר אל השרת )פורט 1729( שולח הודעה אל השרת מקבל את תשובת השרת ומדפיס אותה על המסך 9 ברק גונן
Hello כיתבו שרת שמקבל את פניית הלקוח ועונה לו import socket server_socket = socket.socket(socket.af_inet, socket.sock_stream) server_socket.bind(( 0.0.0.0', 1729)) server_socket.listen(1) client_socket, address = server_socket.accept() client_socket.send( Some Data To Send Here ) data = client_socket.recv(1024) client_socket.close() server_socket.close() 10 ברק גונן
כיתבו שרת שמקבל את פניית הלקוח ועונה לו Hello import socket 0.0.0.0: Listen to all IP s on this computer server_socket = socket.socket(socket.af_inet, socket.sock_stream) server_socket.bind(( 0.0.0.0', 1729)) server_socket.listen(1) client_socket, address = server_socket.accept() client_socket.send( Some Data To Send Here ) data = client_socket.recv(1024) client_socket.close() server_socket.close() 11 ברק גונן
Hello כיתבו שרת שמקבל את פניית הלקוח ועונה לו import socket server_socket = socket.socket(socket.af_inet, socket.sock_stream) server_socket.bind(( 0.0.0.0', 1729)) Define how many clients server_socket.listen(1) can wait for connection client_socket, address = server_socket.accept() client_socket.send( Some Data To Send Here ) data = client_socket.recv(1024) client_socket.close() server_socket.close() 12 ברק גונן
Hello כיתבו שרת שמקבל את פניית הלקוח ועונה לו import socket server_socket = socket.socket(socket.af_inet, socket.sock_stream) server_socket.bind(( 0.0.0.0', 1729)) server_socket.listen(1) client_socket, address = server_socket.accept() client_socket.send( Some Data To Send Here ) data = client_socket.recv(1024) client_socket.close() server_socket.close() Wait for client connection 13 ברק גונן
Hello כיתבו שרת שמקבל את פניית הלקוח ועונה לו import socket server_socket = socket.socket(socket.af_inet, socket.sock_stream) server_socket.bind(( 0.0.0.0', 1729)) server_socket.listen(1) client_socket, address = server_socket.accept() client_socket.send( Some Data To Send Here ) data = client_socket.recv(1024) client_socket: Communication with a specific client_socket.close() client server_socket.close() 14 ברק גונן
Hello כיתבו שרת שמקבל את פניית הלקוח ועונה לו import socket server_socket = socket.socket(socket.af_inet, socket.sock_stream) server_socket.bind(( 0.0.0.0', 1729)) server_socket.listen(1) client_socket, address = server_socket.accept() client_socket.send( Some Data To Send Here ) data = client_socket.recv(1024) client_socket.close() server_socket.close() Note: this is a tuple 15 ברק גונן
פיתחו שני חלונות command line בראשון הריצו את server.py בשני הריצו את client.py אפשר להשתמש ב- Pycharm, מומלץ כשרוצים לדבג 16 ברק גונן
בתרגיל 2.2 כתבתם לקוח שהתחבר לשרת קיים כעת כיתבו את השרת משכפל כל מידע שנשלח אליו ושולח חזרה לבצע טיפ: close בסוף התוכנית משחרר את משאבי המערכת ובעיקר את הפורט טיפ: מומלץ לעבוד עם pycharm במצב התוכנית קורסת לפני הגעה ל- close, הפורט )עצירת הדיבוג( דיבוג, כך שאם ניתן לשחרר את 17 ברק גונן
פרוטוקול Protocol הוא אוסף של חוקים שמאפשר לשתי ישויות או יותר להעביר ביניהן מידע דוגמה: סליחה אדוני כן? מאשר הקמת קשר שולח מידע שבע וחצי מה השעה בבקשה? תודה רבה מבקש להקים קשר מבקש מידע מנתק קשר ברק גונן
השרת מבצע פקודות שהלקוח שולח ומחזיר תשובה רשימת הפקודות: Exit Time, Name, Rand, )פירוט בספר( טיפים לביצוע התרגיל: קלט משתמש- פקודת raw_input הלקוח שולח כמות בתים קבועה- socket.send(4) השרת מחזיר כמות בתים משתנה ניתן לרפד את תשובת השרת באפסים וכך להגיע לאורך קבוע ניתן לכתוב בתחילת תשובת השרת את כמות הבתים בהמשך תכננו מראש את פרוטוקול התקשורת בין השרת ללקוח 19 ברק גונן
בתרגיל זה תכתבו שרת-לקוח של תוכנה שמאפשרת לטכנאי לבצע פעולות שונות על מחשב מרוחק: קבלת צילום מסך הפעלת תוכנות שונות העתקה של קובץ מהשרת הצגת תוכן תיקיה, מחיקת קבצים הדרכה נמצאת בספר הלימוד ובסרטונים הבאים: הנחיות לתרגיל 2.7 תרגיל 2.7 דוגמת הרצה טיפים לעבודה- בשקף הבא 20 ברק גונן
תכננו מראש את פרוטוקול התקשורת בין השרת והלקוח תכננו איך הלקוח יודע שהעברת הקובץ הסתיימה? socket.send(message) לא שולחת כלום אם message ריק בעבודה עם קבצים, יש סיכון שהלקוח יבקש לבצע פעולה על קובץ לא קיים העזרו בתנאים try, except כדי למנוע קריסה כדי לעבוד עם,subprocess.call יש צורך להעביר כפרמטר את המיקום המלא של התוכנה שתופעל 21 ברק גונן
שלב א'- היכנסו לקישור http://www.pythonware.com/products/pil/ שלב ב'- הורידו את pil לגרסת פייתון 2.7 לחלונות והתקינו במידה וההתקנה נכשלת, פיתחו cmd והקלידו: pip install PIL אם זה נכשל, היכנסו לספריה הבאה ונסו שוב להקליק את :pip install PIL cd c:\heights\portableapps\portablepython2*\app\scripts 22 ברק גונן
מודל עבודה שרת לקוח כתיבת socket פיתוח שרת ולקוח ב- python תכנון פרוטוקול תקשורת 23 ברק גונן